package com.tlvip.arithmetic.ch02;

/**
 * <p>description：数组的实现</p>
 * <p>copyright： copyright(C)2016-2099</p>
 * <p>Life is short,we need passion</p>
 * <p>Summary： </p>
 * <p>instructions： </p>
 * Date 1/23/21</p>
 * Author mac
 *
 * @version 1.0
 */
public class ArrayTest {
    private int size; // 数组长度
    private int data[]; // 数组数据
    private int index; // 当前已经存的数据大小

    // 数组的初始化过程
    public ArrayTest(int size) {
        this.size = size;
        data = new int[size];
        index = 0;
    }

    public void print() {
        System.out.println("index:" + index);
        for (int i = 0; i < index; i++) {
            System.out.print(data[i] + " ");
        }
    }

    // 算法复杂度 O(n)
    // loc 从 0 开始
    private void insert(int loc, int n) {
        if (index++ < size) {
            for (int i = size - 1; i > loc; i--) {
                // 将数据向后移动
                data[i] = data[i - 1];
            }
            data[loc] = n;
        } else {
            index--;
            // 扩容把size * 2
            int temp[] = new int[size * 2];
            for (int i = 0; i < size; i++) {
                temp[i] = data[i];
            }
            data = temp;
            size = size * 2;
            insert(loc, n);
        }
    }

    // 算法复杂度 O(n)
    public void delete(int loc) {
        for (int i = loc; i < size; i++) {
            // 防止越界
            if (i != size - 1) {
                data[i] = data[i + 1];
            } else {
                data[i] = 0;
            }
        }
        index--;
    }

    // 算法复杂度 O(1)
    public void update(int loc, int n) {
        data[loc] = n;
    }

    // 算法复杂度 O(1)
    public int get(int loc) {
        return data[loc];
    }


    public static void main(String[] args) {
        ArrayTest arrayTest = new ArrayTest(2);
        for (int i = 0; i < 2; i++) {
            arrayTest.insert(i, i);
        }
        arrayTest.print();
        arrayTest.insert(1, 99);
        arrayTest.print();
    }
}
